import requests
import sys
import os
import wget
from Canal import Canal             #pylint: disable=import-error
from Resolucion import Resolucion   #pylint: disable=import-error

"""
 Para preparar la lista del señor Regio, hay que:
 1.- Borrarle las lineas en blanco
 2.- Borrar de la línea 2 a la 15
 3.- Poner el título ***INTERNACIONALES*** antes de los primeros enlaces 
 4.- La estructura de carpetas tiene que estar definida:

├── Listas
│   ├── Canales de TV
│   │   ├── Cine
│   │   ├── Culturales
│   │   ├── Deportes
│   │   ├── Entretenimiento
│   │   ├── Infantiles
│   │   ├── Internacionales
│   │   ├── Música
│   │   ├── Nacionales
│   │   └── Noticias

"""

def channel_bit_writter(f,url):
    channel_m3u = requests.get(url)
    f.write(channel_m3u.content)

def res_extractor(temp):
    inf = dict()
    res = []
    ft = open(temp,'r')
    is_link = False
    for line in ft.readlines():
        if '#EXTM3U' in line:
            pass
        elif is_link:
            (link,vxttoken)=line.split(',')
            r.link = link
            r.vxttoken = vxttoken
            res.append(r)
            is_link = False
            inf.clear()

        else:
            info = line.split(sep=':')
            info_list = info[1].split(sep=',',maxsplit=3)
            for item in info_list:
                [key, value] = item.split(sep='=')
                inf[key] = value
            r = Resolucion(inf)
            is_link = True
    return res

def new_m3u_writer(ch_l):
    for tipo in ch_l:
        for canal in ch_l[tipo]:
            f = open("Listas/Canales de TV/"+tipo+"/"+canal.nombre,'w')
            for res in canal.resoluciones:
                ext_inf = f"#EXT-INF:-1,{canal.nombre},{canal.tipo}\n"
                ext__x_str_inf = f"#EXT-X-STREAM-INF:PROGRAM-ID={res.program_id},BANDWIDTH={res.bandwith},RESOLUTION={res.resolution},CODECS=\"avc1.4d4015,mp4a.40.5\"\n"
                link = f"{res.link},{res.vxttoken}"
                f.write(ext_inf)
                f.write(ext__x_str_inf)
                f.write(link)
            f.close()
              


def generate(m3u_f):
    complete_list = open(m3u_f,'r')
    channel_lists = {
        'Nacionales' : [],
        'Infantiles' : [],
        'Cine' : [],
        'Entretenimiento' : [],
        'Deportes' : [],
        'Culturales' : [],
        'Música' : [],
        'Noticias' : []
    }
    temp = ''
    content_type = 'Ninguno'
    is_link = False
    for line in complete_list.readlines():
        if '* INTERNACIONALES' in line:
            content_type = 'Internacionales'
        elif '* NACIONALES' in line:
            content_type = 'Nacionales'
        elif 'INFANTILES' in line:
            content_type = 'Infantiles'
        elif ' CINE ' in line:
            content_type = 'Cine'
        elif 'ENTRETENIMIENTO' in line:
            content_type = 'Entretenimiento'
        elif '* DEPORTES *' in line:
            content_type = 'Deportes'
        elif 'CULTURALES' in line:
            content_type = 'Culturales'
        elif 'MUSICA' in line:
            content_type = 'Música'
        elif 'NOTICIAS' in line:
            content_type = 'Noticias'
        elif not line or content_type is 'Ninguno':
            pass
        else:
            if is_link:
                print(line)
                try:
                    temp = wget.download(line,'channel.m3u')
                    c.resoluciones = res_extractor(temp)
                    os.remove(temp)
                    c.info()
                    channel_lists[content_type].append(c)
                except:
                    print("Error con el canal "+c.nombre )
                finally:
                    is_link = False
            else:
                print(line)
                name = line.split(sep=',')[1]
                c = Canal(name, content_type)
                is_link = True
    new_m3u_writer(channel_lists)

        
if __name__ == '__main__' :
    m3u_f = sys.argv[1]
    #new_m3u_f = sys.argv[2]
    generate(m3u_f)
    
    